/* 
  nodejs的事件轮询机制:
    - js是单线程的,我们想要做到非阻塞,那么当我们遇到异步代码的时候,会把异步代码交给libuv的线程池进行管理,主线程依然继续向下执行同步代码
    - libuv会开启多个线程去管理不同的异步代码,当异步代码需要被执行的时候,会把回调函数依次放入到libuv提供的对应的轮询队列中去,(因为node中异步种类繁多,libuv提供了多种回调队列)
    - 回调队列的顺序和种类
      1. timers阶段:
        处理定时器回调函数
      2. pending callbacks 
        这个阶段用来处理系统操作的回调函数
      3. idle prepare阶段
        此阶段是仅供nodejs内部操作调用
      4. poll阶段
        这个阶段主要用来处理如IO操作，网络请求等异步操作
        当进入poll阶段之后,如果poll阶段为空,则除非timers阶段和 check 阶段有回调等待,否则就会一直等到poll阶段有新的回调执行
      5. check阶段:
        这个阶段用来处理setImmediate的回调函数
      6. close callbacks阶段
        这个阶段用来处理close事件
*/